package com.algorithm.array;

import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

@Slf4j
public class ArraySulotion02 {
    /**
     * 1 等于0 往前移动
     * 2 等于2 往最后移动
     *
     * @param nums
     */
    public void sortColors(int[] nums) {
        int i = 0, j = 0, k = nums.length - 1;
        while (j <= k) {
            if (nums[j] == 0) {
                int tmp = nums[i];
                nums[i] = nums[j];
                nums[j] = tmp;
                i++;
            }
            if (nums[j] == 2) {
                int tmp = nums[k];
                nums[k] = nums[j];
                nums[j] = tmp;
                k--;
            }else{
                j++;
            }
        }
    }

    @Test
    @DisplayName("给定一个包含红色、白色和蓝色，一共n 个元素的数组，原地对它们进行排序，使得相同颜色的元素相邻，并按照红色、白色、蓝色顺序排列。"+
            "此题中，我们使用整数 0、1 和 2 分别表示红色、白色和蓝色。" )
    public void test(){
        int [] nums = {1,2,0};
        sortColors(nums);
        log.info("resule is ");
    }
}
